CC      = arm-linux-gcc
LD      = arm-linux-ld
AR      = arm-linux-ar
OBJCOPY = arm-linux-objcopy
OBJDUMP = arm-linux-objdump

INCLUDEDIR 	:= $(shell pwd)/include
CFLAGS 		:= -O0
CFLAGS 		+= -march=armv4
#CFLAGS 		+= -Wall
CPPFLAGS   	:= -nostdinc -I$(INCLUDEDIR)

#LDFLAGS=-Map=your_file.map
#LDFLAGS := -Map=os.map

objs := start.o   
objs += init.o 
objs += interrupt.o 
objs += nand_flash.o 
objs += delay.o 
objs += led.o 
objs += uart.o 
objs += main.o 
objs += exception.o 
objs += timer.o  
objs += printf.o 
objs += string_utils.o
objs += lib1funcs.o 
objs += process.o
objs += switch.o
objs += mem.o
objs += system_call.o

os.bin: $(objs)
		${LD} -T os.lds $^ -o os.elf -Map os.map
		${OBJCOPY} -O binary -S os.elf os.bin
		${OBJDUMP} -D -m arm os.elf > os.dis

%.o:%.c
	${CC} $(CFLAGS) -c -o $@ $<

%.o:%.S
	${CC} $(CFLAGS) -c -o $@ $<

clean:
	rm -f *.bin $(objs) *.elf *.dis

# $@ 表示规则的目标文件
# $^ 表示所有依赖的名字
# $< 表示第一个依赖的名字
# % 是通配符，表示它和一个字符串中任意个数字符相匹配
# arm-linux-ld -T 用来指定linker script
# arm-linux-objdump -D disassemble 反汇编所有段
# arm-linux-objdump -m machine 指定反汇编目标文件时使用的架构

# 可以参考裸机i2c章节

